<?php
/**
* @file IUserService.php
* Copyright (c) Friends Group. All rights reserved.
* $Id$
*
*/

require_once(realpath(dirname(__FILE__)) . '/../classes/Account.php');
require_once(realpath(dirname(__FILE__)) . '/../classes/UserOption.php');
require_once(realpath(dirname(__FILE__)) . '/../classes/UserChatOption.php');
require_once(realpath(dirname(__FILE__)) . '/../classes/Avatar.php');
require_once(realpath(dirname(__FILE__)) . '/../classes/Role.php');

/**
 * Xử lý các vấn đế liên quan đến User
 */
interface IUserService 
{

    /**
     * @ReturnType void
     * @ParamType user 
     * Tạo 1 user mới
     */
    public function createUser($user);

    /**
     * @ReturnType void
     * @ParamType userId 
     * Xóa user theo ID
     */
    public function deleteUser($userId);

    /**
     * @ReturnType classes.Account
     * @ParamType userId 
     * Tìm user theo ID
     */
    public function findUserById($userId);

    /**
     * @ReturnType classes.Account
     * @ParamType userName 
     * Tìm user theo username
     */
    public function findUserByName($userName);

    /**
     * @ReturnType void
     * @ParamType user 
     * Cập nhật thông tin user
     */
    public function updateUser($user);

    /**
     * @ReturnType void
     * @ParamType userId 
     * @ParamType group 
     * Tạo 1 user group 
     */
    public function createUserGroup($userId, $group);

    /**
     * @ReturnType Object
     * @ParamType userId 
     * Lấy danh sách tất cả group của user
     */
    public function getUserGroups($userId);

    /**
     * @ReturnType void
     * @ParamType userId 
     * @ParamType group 
     * Xóa user group
     */
    public function deleteUserGroup($userId, $group);

    /**
     * @ReturnType void
     * @ParamType userId 
     * @ParamType friendId 
     * Thêm user friend
     */
    public function addUserFriend($userId, $friendId, $group);

    /**
     * @ReturnType Object
     * @ParamType userId 
     * Lấy danh sách tất cả friend của user
     */
    public function getUserFriends($userId);

    /**
     * @ReturnType void
     * @ParamType userId 
     * @ParamType friendId 
     * Xóa friend khỏi danh sách friend
     */
    public function removeUserFriend($userId, $friendId);

    /**
     * @ReturnType void
     * @ParamType userId 
     * @ParamType friendId 
     * @ParamType group 
     * Di chuyển friend sang nhóm khác
     */
    public function moveFriendToGroup($userId, $friendId, $group);

    /**
     * @ReturnType Object
     * @ParamType userId 
     * @ParamType groupId 
     * Lấy danh sách tất cả friend trong 1 group
     */
    public function getFriendsInGroup($userId, $groupId);

    /**
     * @ReturnType classes.Account
     * Lấy danh sách các user đang online
     */
    public function getAllUsersOnline();

    /**
     * @ReturnType void
     * @ParamType account 
     * Kích hoạt tài khoản
     */
    public function activateAccount($account, $checkKey);

    /**
     * @ReturnType classes.UserOption
     * @ParamType userId 
     * Lấy thông tin cấu hính của user
     */
    public function getAllUserOptions($userId);
    public function getUserOption($userId, $optionName);

    /**
     * @ReturnType void
     * @ParamType userId 
     * @ParamType friendId 
     * @ParamType chatOption 
     * Lưu các cấu hính chat của user
     */
    public function setUserChatOption($userId, $friendId, $optionName, $optionValue);

    /**
     * @ReturnType classes.UserChatOption
     * @ParamType userId 
     * @ParamType friendId 
     * Lấy thông tin cấu hình chat
     */
    public function getAllUserChatOptions($userId, $friendId);
    public function getUserChatOption($userId, $friendId, $optionName);

    /**
     * @ReturnType classes.Avatar
     * @ParamType userId 
     * Lấy thong tin avatar của user
     */
    public function getUserAvatar($userId);

    /**
     * @ReturnType classes.Role
     * @ParamType userId 
     * Lấy thông tin về quyền của user
     */
    public function getUserRole($userId);

    /**
     * @ReturnType void
     * @ParamType userId 
     * @ParamType avatar 
     * Lưu user avatar
     */
    public function setUserAvatar($userId, $avatar);

    /**
     * @ReturnType void
     * @ParamType userId 
     * @ParamType role 
     * Set quyền cho user
     */
    public function setUserRole($userId, $role);

    /**
     * @ReturnType Object
     * @ParamType status 
     * Lấy danh sách user theo trạng thái
     */
    public function getUsersByStatus($status);

    /**
     * @ReturnType void
     * @ParamType userId 
     * @ParamType status 
     * Set trạng thái cho user
     */
    public function setUserStatus($userId, $status, $statusText = "");

    /**
     * @ReturnType Object
     * @ParamType userId 
     * Lấy trạng thái của user
     */
    public function getUserStatus($userId);
}
?>